package 启蒙阶段;

/**
 * 创建人：刘源江
 * 类描述：封装、构造方法
 * 创建时间：2022/3/25 1:33
 **/

public class demo07面向对象三大特征之封装 {
    public static void main(String[] args) {
        //封装：隐藏对象的属性和实现细节(方法)，对外提供公有的访问方式，方法由我提供，别人不能乱修改，提高代码的安全性
        //原则：将属性隐藏起来，若需要访问某个属性，提供公共方法对其访问
        Anime npy = new Anime();
        npy.setName("鬼灭之刃");
        System.out.println("喜欢看:" + npy.getName());

        System.out.println("----------------------");
        //构造对象的同时调用的方法就是构造方法
        构造方法 structure = new 构造方法();
        structure.普通方法();
    }
}

class Anime{
    //private 关键字 私有的意思，修饰的东西（包括变量和方法），只能在本类中被访问和使用
    //私有仅仅是封装的一种手段，不能说封装就是私有
    //对属性name进行封装，private关键字使外部不能调用
    //      setName方法使得外部可以进行更改，也只能在我的范围里面更改，
    //      getName方法使得外部可以获取封装私有的name值
    private String name = "火影忍者";

    public String getName(){
        return name;
    }

    public  void  setName(String name){
        if (name == "鬼灭之刃"){
            System.out.println("没看过鬼灭之刃");
        }else {
            this.name = name;
        }
    }
}

class 构造方法{

    //构造方法的特点：方法名与它所在的类名相同，它没有返回值，所以不需要返回值类型，甚至不需要void，但是可以return
    //结束构造方法回到main方法的出口结束程序
    public 构造方法(){
        System.out.println("我是构造方法，在new构造对象的同时给new关键字调用");
    }

    public void 普通方法(){
        System.out.println("我是普通方法，在构造对象之后用对象名地址值nv来调用");
    }
}

